www.gusucode.com > VC++ 仿SQLServer企业管理器的SQL客户端工具-源码程序 > VC++ 仿SQLServer企业管理器的SQL客户端工具-源码程序/code/tabDesc.cpp
//Download by http://www.NewXing.com #include "stdafx.h" #include "sql.h" #include "sqlext.h" #include "FTDB.h" #include "tabDesc.h" CTabDesc::CTabDesc() { } CTabDesc::~CTabDesc() { } BOOL CTabDesc::DescTable(CFTDB* pDB,LPCSTR pszTableName) { if(pDB->m_hdbc==NULL) return FALSE; HSTMT hstmt; RETCODE rt=SQLAllocStmt(pDB->m_hdbc,&hstmt); SQLSetStmtOption(hstmt,SQL_CONCURRENCY,SQL_CONCUR_READ_ONLY); SQLSetStmtOption(hstmt,SQL_CURSOR_TYPE,SQL_CURSOR_FORWARD_ONLY); if(!SQL_SUCC(rt)) return FALSE; //char szSQL[100]; //sprintf(szSQL,"desc %s",pszName); //rt=SQLExecDirect(hstmt,(UCHAR*)szSQL,strlen(szSQL)); char szTName[300]; sprintf(szTName,pszTableName); TRACE("desc table %s\n",szTName); rt=SQLColumns(hstmt, NULL,//qualifier 0, NULL,//owner 0, (UCHAR*)szTName,//table name SQL_NTS, NULL, 0); int iTail=0; if(SQL_SUCC(rt)) { m_arrColName.RemoveAll(); m_arrColTypeName.RemoveAll(); m_arrColDataLength.RemoveAll(); m_arrColDataPrecision.RemoveAll(); m_arrColDataScale.RemoveAll(); m_arrColDataType.RemoveAll(); m_arrColNullable.RemoveAll(); char szColName[128],szTypeName[128]; SDWORD cbDataType,cbDataPrecision,cbDataScale,cbDataLength,cbNullable; SDWORD cbT; SQLBindCol(hstmt, 4, SQL_C_CHAR, szColName, 128, &cbT); SQLBindCol(hstmt, 5, SQL_C_SLONG, &cbDataType, 0, &cbT); SQLBindCol(hstmt, 6, SQL_C_CHAR, szTypeName, 128, &cbT); SQLBindCol(hstmt, 7, SQL_C_SLONG, &cbDataPrecision, 0, &cbT); SQLBindCol(hstmt, 8, SQL_C_SLONG, &cbDataLength, 0, &cbT); SQLBindCol(hstmt, 9, SQL_C_SSHORT, &cbDataScale, 0, &cbT); SQLBindCol(hstmt, 11, SQL_C_SSHORT, &cbNullable, 0, &cbT); rt = SQLFetch(hstmt); while (TRUE) { if (SQL_SUCC(rt)) { m_arrColName.Add(szColName); m_arrColTypeName.Add(szTypeName); m_arrColDataType.Add((DWORD)cbDataType); m_arrColDataPrecision.Add((DWORD)cbDataPrecision); m_arrColDataLength.Add((DWORD)cbDataLength); m_arrColDataScale.Add((DWORD)cbDataScale); m_arrColNullable.Add((DWORD)cbNullable); rt=SQLFetch(hstmt); } else break; } } SQLFreeStmt(hstmt,SQL_CLOSE); return TRUE; } BOOL CTabDesc::GenerateDescString(CStringArray &arrRes) { arrRes.RemoveAll(); int iTotal=m_arrColName.GetUpperBound()+1; CString szT; for(int i=0;i<iTotal;i++) { /* DWORD dwType=m_arrColDataType.GetAt(i); switch(dwType) { case(SQL_DECIMAL): case(SQL_NUMERIC): if(m_arrColDataScale.GetAt(i)+m_arrColDataPrecision.GetAt(i) > m_arrColDataLength.GetAt(i)+1) szT.Format("%s %s (%d)", m_arrColName.GetAt(i), m_arrColTypeName.GetAt(i), m_arrColDataPrecision.GetAt(i)); else szT.Format("%s %s (%d.%d)", m_arrColName.GetAt(i), m_arrColTypeName.GetAt(i), m_arrColDataPrecision.GetAt(i), m_arrColDataScale.GetAt(i)); break; case(SQL_CHAR): case(SQL_VARCHAR): szT.Format("%s %s (%d)", m_arrColName.GetAt(i), m_arrColTypeName.GetAt(i), m_arrColDataLength.GetAt(i)); break; default: szT.Format("%s %s",m_arrColName.GetAt(i),m_arrColTypeName.GetAt(i)); break; }*/ szT.Format("%s %s",m_arrColName.GetAt(i),m_arrColTypeName.GetAt(i)); arrRes.Add(szT); } return iTotal; }